package com.kang.c0c.util;

/**
 * com.kang.c0c.parser.Parser中需要用到的一些字符串操作
 *
 * @author kang
 *
 * Feb 8, 2009
 */
public class PString {
	/**
	 * 比较错误处读到的标识符是否为拼错了关键字标识符 
	 * 关键字标识符的常见拼写错误为：
	 * 	1、漏写了一个字母
	 * 	2、多写了一个字母（一般多写出的都是'a'~'z'、'A'~'Z'，其他字母多写的人极强无比！！！）
	 * 	3、相邻两个字符顺序颠倒（我自己经常出这样的错，大概是左右手的响应速度不一样吧……）
	 * 
	 * @param ident			出错处读到的标识符,
	 * @param keyword		可能被拼错了的倒霉的关键字
	 * @return				true or false
	 */
	public static boolean liksKeywords(String ident,String keyword){
		if(ident==null || keyword==null)
			return false;
		
		ident = ident.toLowerCase();
				
		for(int i=0;i<keyword.length(); i++){
			if(ident.equals(PString.killElementAt(keyword,i)))
				return true;
		}
		
		for(int i=0;i<ident.length(); i++){
			if(keyword.equals(PString.killElementAt(ident,i)))
				return true;
		}
		
		for(int i=0;i<ident.length(); i++){
			if(keyword.equals(PString.exchangePosition(ident, i)))
				return true;
		}
		
		return false;
	}
	
	/**
	 * 获得字符串src丢失第i个字符后的字符串
	 * 
	 * @param src
	 * @param i
	 * @return
	 */
	private static String killElementAt(String src, int i){
		if(i >= src.length())
			return null;
		if(i == 0)
			return src.substring(1);
		return src.substring(0,i-1).concat(src.substring(i+1));
	}
	
	/**
	 * 交换字符串src第i个字符和第i+1个字符
	 * 
	 * @param src
	 * @param i
	 * @return
	 */
	private static String exchangePosition(String src,int i){
		if(i+1 >= src.length())
			return null;
		char[] temp = src.toCharArray();
		char c;
		
		c = temp[i];
		temp[i] = temp[i+1];
		temp[i+1] = c;
		
		return temp.toString();
	}
}
